#include <iostream>
#include <time.h>
#include <conio.h>
#include "Kurcaci.h"
#include "Aqua.h"
#include "Bolt.h"
#include "Clash.h"
#include "Lahan.h"
#include "player.h"
#include "Times.h"
#include "Story.h"
#include "classinventory.h"
#include "tanaman.h"
#include "classmenu.h"

#include "Kurcaci.cpp"
#include "Aqua.cpp"
#include "Bolt.cpp"
#include "Clash.cpp"
#include "Lahan.cpp"
#include "player.cpp"
#include "Times.cpp"
#include "Story.cpp"
#include "classinventory.cpp"
#include "tanaman.cpp"
#include "classmenu.cpp"

//Jangan lupa memberi -lwinmm dalam mengcompile!
using namespace std;

Player P("");
Lahan L;
Times T;
inventory I;
Aqua A;
Bolt B;
Clash C;
Story S;
Menu M;

int main ()
{
	P.SetPosition(9,9);
	srand ( time(NULL) );
	B.WakeUp();
	if(B.IsWakeUp())
	{cout<<"Bolt : Siap! Saya bangun, Komandan!!"<<endl;}
	L.setTanaman(5,6,9); //Menanam ChronoPlant
	L.setTanaman(5,4,9); //Menanam ChronoPlant
	
	L.setStatus(5,6,7); //Membuat penghalang untuk gerak , dengan tanaman Harvestable
	L.setStatus(5,4,7); //Membuat penghalang untuk gerak Clash, dengan tanaman Harvestable
	cout<<"Ditaruh tanaman yang belum diairi pada posisi (5,6) dan (5,4)"<<endl;
	A.SetX(1);
	A.SetY(1);
	B.SetX(5);
	B.SetY(5);
	C.SetX(2);
	C.SetY(2);
	
	if(B.IsSafeToWalk(5,6))
	{cout<<"Bolt : Siap! Titik tujuan aman, Komandan!!"<<endl;}
	else {cout<<"Bolt : Siap! Titik tujuan tidak aman, Komandan!!"<<endl;}
	
	if(B.IsTargetting())//Memeriksa apakah Aqua sudah memiliki tanaman untuk ditarget.
	{cout<<"Bolt : Siap! Saya menemukan sebuah tanaman yang dapat dipanen, Komandan!!"<<endl;}
	else {cout<<"Bolt : Siap! Saya tidak menemukan sebuah tanaman yang dapat dipanen, Komandan!!"<<endl;}
	
	cout<<"Posisi Aqua saat ini: "<<A.GetX()<<" , "<<A.GetY()<<endl;
	cout<<"Posisi Bolt saat ini: "<<B.GetX()<<" , "<<B.GetY()<<endl;
	
	A.Move(); //Aqua, yang menjadi penghalang digerakkan, agar Bolt memiliki tempat untuk bergerak.
	B.Move(); //Bolt bergerak.
	
	if(B.IsTargetting())
	{cout<<"Bolt : Siap! Saya menemukan sebuah tanaman yang dapat dipanen, Komandan!!"<<endl;
		Position glare;
		glare = B.GetChase();
		cout<<"Tanaman yang saya target terletak di ("<<glare.x<<","<<glare.y<<")"<<" , Komandan!!"<<endl;}
	else {cout<<"Bolt : Siap! Saya tidak menemukan sebuah tanaman yang dapat dipanen, Komandan!!"<<endl;}
	
	cout<<"Posisi Aqua setelah bergerak: "<<A.GetX()<<" , "<<A.GetY()<<endl;
	cout<<"Posisi Bolt setelah bergerak: "<<B.GetX()<<" , "<<B.GetY()<<endl;
	
	
	//cout<<"Berikut, kita akan memperhatikan gerak Bolt, bagaimana ia memilih tanaman yang dapat dipanen,"<<endl;
	//cout<<"Dan menjual tanaman tersebut ke kotak penjualan yang terletak di titik (8,0) ."<<endl;
	
	while(B.IsTargetting())
	{
		cout<<"Posisi Bolt saat ini: "<<B.GetX()<<" , "<<B.GetY()<<endl;
		if(L.getStatus(5,6) == 7)
		{
			cout<<"Tanaman di Posisi (5,6) belum dipanen."<<endl;
		}
		else
		{cout<<"Tanaman di Posisi (5,6) telah dipanen."<<endl;
		}
		
		if(L.getStatus(5,4) == 7)
		{
			cout<<"Tanaman di Posisi (5,4) belum dipanen."<<endl;
		}
		else
		{cout<<"Tanaman di Posisi (5,4) telah dipanen."<<endl;
		}
		
		
		A.Move(); // Aqua diminta bergerak agar tidak menghalangi jalan.
		
		B.Move(); // Bolt bergerak, dimana Bolt juga melakukan ActKurcaci bila ia memiliki target.
		
		if(B.IsHolding())
		{cout<<"Bolt : Siap! Saya sudah memanen tanaman yang bersangkutan, Komandan!"<<endl;}
		else{cout<<"Bolt : Siap! Saya belum memanen tanaman yang bersangkutan, Komandan!"<<endl;}
		
	}
	
	//proses diatas selesai manakala Bolt sudah memanen tanaman.
	//proses dibawah akan menuliskan proses Bolt mengantarkan tanaman ke kotak penjualan.
	
	while(B.IsHolding())
	{
		
			cout<<"Posisi Bolt saat ini: "<<B.GetX()<<" , "<<B.GetY()<<endl;
			if(B.IsHolding())
				{cout<<"Bolt : Siap! Saya belum menjual tanaman yang bersangkutan, Komandan!"<<endl;}
				else{cout<<"Bolt : Siap! Saya sudah menjual tanaman yang bersangkutan, Komandan!"<<endl;}
	
			B.Move();//Bolt bergerak.
			/*Sistem Pergerakan Bolt menuju kotak penjualan adalah sebagai berikut:
				Bolt akan bergerak random, hingga ia berada di posisi satu petak dari pinggiran lahan (unplantable).
				Bila Bolt sudah berada di samping pinggiran lahan, ia akan langsung berpindah ke pinggiran lahan,
				dan bergerak ke kotak penjualan.
				Bila Bolt sudah berada tepat di samping kotak penjualan, ia akan langsung menjual
				tanaman yang ia pegang.
			*/
			if(B.IsHolding())
				{cout<<"Bolt : Siap! Saya belum menjual tanaman yang bersangkutan, Komandan!"<<endl;}
				else{cout<<"Bolt : Siap! Saya sudah menjual tanaman yang bersangkutan, Komandan!"<<endl;}
		
	}
	
	
	B.Sleep();
	if(B.IsWakeUp())
	{cout<<"Bolt : Siap! Saya bangun, Komandan!!"<<endl;}
	else {cout<<"Bolt : {sedang beristirahat}"<<endl;}
	
	
	return 0;
}
